/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.DetallePrestamoDaoLocal;
import mx.its.dsw2.biblioteca.dao.PrestamoDaoLocal;
import mx.its.dsw2.biblioteca.enumeraciones.EstadoDetallePrestamo;
import mx.its.dsw2.biblioteca.enumeraciones.EstadoTransaccion;
import mx.its.dsw2.biblioteca.modelo.DetallePrestamo;
import mx.its.dsw2.biblioteca.modelo.Libro;
import mx.its.dsw2.biblioteca.modelo.Prestamo;
import mx.its.dsw2.biblioteca.modelo.Usuario;

/**
 *
 * @author 100101
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoTransaccion register(Prestamo lend, List<Libro> books) {
        int available =3;
        List<Prestamo> incompleteLends=prestamoDao.findIncomplete(lend.getIdUsuario());
        for (Prestamo p : incompleteLends) {
            available=available-detallePrestamoDao.findLends(p).size();
        }
        if(available<=0||books.size()>available){
            return EstadoTransaccion.INCOMPLETO;
        }else{
            //agregar fecha y hora
             lend.setFecha(new Date());
             lend.setHora(new Time(new Date().getTime()));
     
            prestamoDao.create(lend);
            for(Libro b:books){
                DetallePrestamo dp=new DetallePrestamo();
                dp.setIdLibro(b);
                dp.setIdPrestamo(lend);
                dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
                detallePrestamoDao.create(dp);
            }
             return EstadoTransaccion.COMPLETO;
        }
       
        
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstadoTransaccion takeBack( List<Libro> books) {
        for(Libro book:books){
            DetallePrestamo dp=detallePrestamoDao.findBooks(book);
            if(dp==null){
                return EstadoTransaccion.INCOMPLETO;
            }else{
                dp.setEstado(EstadoDetallePrestamo.REGRESADO.ordinal());
                detallePrestamoDao.edit(dp);
            }
        }
        return null;
    }

    @Override
    public List<Prestamo> incompleteLendsByUser(Usuario user) {
        return prestamoDao.findIncomplete(user);
    }
    
     @Override
    public List<Prestamo> generalIncompleteLends() {
        return prestamoDao.findGeneralIncompletes();
    }


    @Override
    public List<DetallePrestamo> lendBooksByUser(Usuario user) {
        List<DetallePrestamo> listBooks=new ArrayList<DetallePrestamo>();
        for(DetallePrestamo dp:detallePrestamoDao.findAll()){
            if(dp.getIdPrestamo().getIdUsuario()==user){
                listBooks.add(dp);
            }
        }
        return listBooks;
    }
    
    @Override
    public List<DetallePrestamo> generalLendsBooks() {
        List<DetallePrestamo> listBooks=new ArrayList<DetallePrestamo>();
        for(DetallePrestamo dp:detallePrestamoDao.findAll()){
                listBooks.add(dp);   
        }
        return listBooks;
    }

    @Override
    public List<Prestamo> getAll() {
        return prestamoDao.findAll();
    }
    
    
    
    
    

}
